package com.test.design.pattern.proxy.jdk_proxy;

/**
 *@ClasName Client
 *@Descripution TODO
 *@Author leikw
 *@Date 2021/11/9 15:05
 *@Version V1.0
*/
public class Client {
    public static void main(String[] args) {
        //获取代理对象
        //1,创建代理工厂对象
        ProxyFactory factory = new ProxyFactory();
        //2,使用factory对象的方法获取代理对象
        SellTickets proxyObject = factory.getProxyObject();
        //3,调用卖调用的方法
        proxyObject.sell();
        proxyObject.sell2();

        System.out.println(proxyObject.getClass());

        //让程序一直执行
        while(true) {}

    }
// 执行流程如下
//1. 在测试类中通过代理对象调用sell()方法
//2. 根据多态的特性，执行的是代理类（$Proxy0）中的sell()方法
//3. 代理类（$Proxy0）中的sell()方法中又调用了InvocationHandler接口的子实现类对象的
//invoke方法
//4. invoke方法通过反射执行了真实对象所属类(TrainStation)中的sell()方法
}
